是一個由key
與value
所組成的集合,型態長得像JS的物件或是python的字典,每一個key
會對應到屬於他的value
。
所以當你使用Key
便可以找到value
。
簡單來說就是一個蘿蔔一個坑。
那key
跟valueu
指的又是什麼呢?下面將會告訴你。
hash的模樣有兩種:
old_hash = {:product => "coffee", :price => 45}
new_hash = {product: "coffee", price: 45}
但不管是哪一種,本質上都是一樣的,它只不過是個語法糖衣罷了。
p new_hash = {product: "coffee", price: 45}
# 印出 {:product=>"coffee", :price=>45}
開頭有提到key
和value
,以上面new_hash
為例:product
跟price
稱為key;"coffee"
跟45
為value。
當你使用置物櫃時,你會拿到一把屬於這格置物櫃的鑰匙。
你使用結束之後,你必須拿你剛剛拿到的鑰匙才能打開你置物櫃的門;不然,不管你鑰匙怎麼轉,門依舊無動於衷,因為它對應的鑰匙不是你手中的那一把。
Hash就像置物櫃的門,你需要正確的key
才能拿到你想要的value
。
user = {name: "Kitty", age: 20, gender: "Female"}
p user["name"] # => nil
p user[:name] # => "Kitty"
:::warning
要注意,因為Hash中的key
是符號:name
而不是字串"name"
,這兩個是不一樣的東西,所以拿到的不是你想要的東西,這邊要特別注意。
至於符號symbol
是什麼?下個單元會在專門介紹。
:::
如果你想要知道hash中所有的key或value,可以透過使用keys
或values
方法來印出:
user = {name: "Kitty", age: 20, gender: "Female"}
p user.keys # => [:name, :age, :gender]
p user.values # => ["Kitty", 20, "Female"]
但你改變主意了,你想要一個一個拿出來:
user.each do |element|
p element
end
# 執行後的結果
# => [:name, "Kitty"]
# => [:age, 20]
# => [:gender, "Female"]
接著你又想個別取出:
user.each do |key, value|
p key
p value
end
# 執行後的結果
# => name
# => Kitty
# => age
# => 20
# => gender
# => Female
coding到三更半夜,眼睛很酸以及身體又累,但是眼前的hash又很龐大,能不能用一段程式就可以讓我知道這個key有沒有在這個hash當中。
我們可以這樣判斷:
user = {name: "Kitty", age: 20, gender: "Female"}
p user.key?(:gender) # => true
p user.key?(:address) # => false
那value呢?
user = {name: "Kitty", age: 20, gender: "Female"}
p user.value?("Kitty") # => true
p user.key?(40) # => false
以上為雜湊Hash的基本介紹,更多的內容可以查閱Ruby的官方手冊。
參考資料: